<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!--点击按钮弹出警告：你别点我-->
    <input type="button" value="点击" onclick="(function(){alert('你别点我');})()">
    <script>
        //函数表达式:吧函数当做一个值赋给变量。
        //注意：函数表达式必须先声明，再调用。
        let f1 = function fun(){
            console.log('hello f1');
        };
        //函数调用：变量名（）调用。
        f1();
        let f2 = function fun2(name){
            console.log('hello'+name);
        }
       f2('张三');
       //匿名函数:函数没有名字
       let f3 = function(a,b){
        return a<b?a:b;
       };
       console.log(f3(12,8));
       //立即执行函数：匿名函数自调用。用（）括起来的部分是一个整体。
       (function(a,b){
        console.log(a+b);
       })(1,2);

       let a = function(){
        console.log(1);
       };
       console.log(typeof a);  //函数数据类型：属于object，和数组一样·。
       //把函数这个值作为实参传给另一个函数
       //回调函数：把函数a当做参数传给函数b，在函数b中调用函数a，此时函数a叫做回调函数
       let myf1 = function(a){
        a();  //myf2();
       };
       let myf2 = function(){
        console.log('myf2');
       }
       myf1(myf2);
       //递归函数：在函数中调用自己。
       //阶乘：10！=10*9*8*7*6.....*1>10*(9!)>10*9*(8!)>10*9*8*(7!)
       console.log('--------------');
       function test(){

       }
       function test2(){
        return 0;
       }
       console.log(test());
       console.log(test2());
    </script>
</body>
</html>